Welcome to pandas!

6.15 实例

1、筛选下半年销量大于上半年的记录

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 筛选下半年销量大于上半年的记录.xlsx" , header =[ 0,1 ], index_col = 0 )

print (df)

df1=df[df[ "上半年" ].sum(axis=1)>df[ "下半年" ].sum( axis = 1 )]

print (df1)

返回:

姓名 上半年 下半年
1月 2月 3月 7月 8月 9月
张三 25 28 96 24 38 74
许麻子 34 7 55 32 73 42
郭麻子 55 75 44 82 68 15
李四 84 14 61 68 54 96

姓名 上半年 下半年
1月 2月 3月 7月 8月 9月
张三 25 28 96 24 38 74
郭麻子 55 75 44 82 68 15

2、对文本数字月份排序

需要对表格的索引排序,但如果直接使用df.sort_index()排序后,月份顺序并不正确, 因为月份中既有数字,又有文本,默认是按照文本方式排序,但我们需要按照月份数据大小排序,所以需要使用索引的自定义排序。

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 对文本数字月份排序.xlsx" , index_col = 0 )

df0=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 对文本数字月份排序.xlsx" )

#df0如果设置了索引,再去提取Series数据会报错

print (df)

# df1=df.月份 # 如果在导入数据是设置了索引,那么这样写会报错

# df1=df.月份.str.findall("\d+").str[0].astype("int") # 第二个str如果没有,则会返回Series的一个元素如8月的8,如果设置则会返回整排列表每个列表的第1个元素

df1=df0.月份.str.extract( "(\d+)" , expand = False ).astype( "int" ) # (\d+)如括号不写,分不了组,会报错,expand=False 表示不扩展为,设置为Series数据

print (df1)

df2=df.sort_index(key= lambda s:s.str.extract( "(\d+)" , expand = False ).astype( "int" ), axis =0, ascending = True )

# key是对index_col=0索引排序

print (df2)

返回:

北京 上海 深圳
月份
11月 1200 8200 7000
8月 2100 1300 7400
10月 1300 500 3700
9月 6300 1400 7700
12月 7100 4300 1200

0 11
1 8
2 10
3 9
4 12

Name: 月份, dtype: int32


北京 上海 深圳
月份
8月 2100 1300 7400
9月 6300 1400 7700
10月 1300 500 3700
11月 1200 8200 7000
12月 7100 4300 1200

3、根据分类返回等级并设置为索引

对分数列的数字进行判断,大于等于90返回优,大于等于70返回中,否则返回差,将返回的等级做为索引添加到行索引中,并且做为行索引中的第1级。

import pandas as pd

def levels(score):

if score>=90:

return "优"

elif score>=70:

return "中"

else:

return "差"

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 根据分类返回等级并设置为索引.xlsx" , index_col = 0 )

print (df)

df1=df.set_index( "分数" , append = True , drop = False ).rename( index = levels , level = "分数" ).swaplevel( 0,1 ).sort_index()

#index=levels是将判断函数放入索引序列,swaplevel(0,1)是将两个索引位置调换,

print (df1)

返回:

姓名 分数
工号
NED01 张三 99
NED02 李四 89
NED03 郭麻子 35
NED04 许麻子 79
NED05 杨鬼子 60

姓名 分数
分数 工号
NED02 李四 89
NED04 许麻子 79
NED01 张三 99
NED03 郭麻子 35
NED05 杨鬼子 60